const express = require('express');
const db = require('../db');
const md5=require('../util/md5')
//导入判断目录是否已经存在的处理模块
const mkdir = require('../util/mkdirs')
//引入中间件
const multer = require('multer');
var fs = require('fs');
  const path = require('path'); // 导入 path 模块
const router = express.Router();
//使用multer解析FormData数据
const storage = multer.memoryStorage(); // 将文件存储在内存中
const upload = multer({ storage: storage });
//登录验证jwt包
const jwt = require("jsonwebtoken");
//简易随机生成
const secretKey = 'weiyinglin';
const moment = require('moment');
const { error } = require('console');

//管理员添加公告
router.post('/addNotice',upload.none(),(req,res)=>{
  const {title,detail}=req.body;
  const author='admin'
  // 将新用户插入到数据库
const insertrQuery = 'INSERT INTO announcements (title,content,author) VALUES (?, ?,?)';
    db.query(insertrQuery,[title,detail,author],(err,rows)=>{
        if (err) {
            console.error('Error inserting user to database', err);
            return res.status(500).json({ message: '服务器错误' });
        } 
          return res.status(201).json({message:'添加成功'})
    })
   
})

//修改公告接口
router.post('/updateNotice',upload.none(),(req,res)=>{
  const {title,content,id}=req.body;
//  console.log(title,content,id)

 //根据id更新数据库中的公告数据
 const updateQuery='UPDATE announcements SET title=?, content=? WHERE id =?'
 db.query(updateQuery,[title,content,id],(err,rows)=>{
  if (err) {
    console.error('Error inserting user to database', err);
    return res.status(500).json({ message: '服务器错误' });
  } 
  else{
    if(rows.affectedRows>0){
      // console.log(rows)
      return res.status(201).json({message:'修改成功'})
    }
    else{
      // console.log('我在这')
      return res.status(402).json({error:'修改公告失败'})
    }
  }

 }) 
})

//公告置顶接口
router.post('/noticeToTop',(req,res)=>{
   const {id}=req.body
  //  console.log(id)

   const updateQuery='UPDATE announcements SET is_active=(id=?)'
   db.query(updateQuery,[id],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
   return res.status(201).json({message:'置顶成功'})

   })
})

//删除公告接口
router.post('/delNotice',(req,res)=>{
  const {id}=req.body
  const deleteQuery='DELETE from announcements WHERE id=?'
  db.query(deleteQuery,[id],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
    else{
      if(rows.affectedRows>0){
        return res.status(201).json({message:'删除成功'})
      }
      else{
        return res.status(402).json({error:'删除公告失败'})
      }
    }
  
  })
})

//获取所有咨询师信息接口
router.get('/getAllConsultants',(req,res)=>{
  const selectQuery='SELECT * FROM  consultants '
  db.query(selectQuery,[],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
         return res.status(201).json(rows)
  })

})

//管理员添加咨询师
router.post('/addConsultant',upload.none(),(req,res)=>{
  const {avatar,name,coun_label,introduction,experience,account,gender}=req.body
  
//将信息插入到数据库中
const insertQuery='INSERT INTO consultants (avatar,name,coun_label,introduction,experience,account,gender) VALUES (?, ?,?,?,?,?,?)'
db.query(insertQuery,[avatar,name,coun_label,introduction,experience,account,gender],(err,rows)=>{
  if (err) {
    console.error('Error inserting user to database', err);
    return res.status(500).json({ message: '服务器错误' });
    } 
   return res.status(201).json({message:'添加成功'})

   })
})

//删除咨询师接口
router.post('/delConsultant',(req,res)=>{
  const {id}=req.body
  const deleteQuery='DELETE from consultants  WHERE id=?'
  db.query(deleteQuery,[id],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
    else{
      if(rows.affectedRows>0){
        return res.status(201).json({message:'删除成功'})
      }
      else{
        return res.status(402).json({error:'删除咨询师失败'})
      }
    }
  
  })
})

//修改咨询师接口
router.post('/updateConsultant',upload.none(),(req,res)=>{
  const {avatar,name,coun_label,introduction,experience,account,gender,id}=req.body

//根据id更新数据库中的公告数据
const updateQuery='UPDATE consultants SET avatar=?, name=?,coun_label=?,introduction=?,experience=?,account=?,gender=? WHERE id =?'
db.query(updateQuery,[avatar,name,coun_label,introduction,experience,account,gender,id],(err,rows)=>{
  if (err) {
    console.error('Error inserting user to database', err);
    return res.status(500).json({ message: '服务器错误' });
  } 
  else{
    if(rows.affectedRows>0){
      // console.log(rows)
      return res.status(201).json({message:'修改成功'})
    }
    else{
      // console.log('我在这')
      return res.status(402).json({error:'修改咨询师失败'})
    }
  }

 }) 
})

//获取所有用户信息
router.get('/getAllUsers',(req,res)=>{
  const selectQuery = 'SELECT * FROM users WHERE role= "normal"'
  db.query(selectQuery,(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
      rows.forEach((row)=>{
        const {avatar}=row
       const imagePath = path.join(__dirname, `../${avatar}`);  // 图片的实际存储路径
      //分片发送base64格式图片
       if (fs.existsSync(imagePath)) {
        // // 读取文件并将其转换为Base64格式
        const imageBuffer = fs.readFileSync(imagePath);
        const base64Image = Buffer.from(imageBuffer).toString('base64');
           // 按固定大小分割 Base64 数据
        const chunkSize = 1024; // 每个分块的大小
        const totalChunks = Math.ceil(base64Image.length / chunkSize);
        const base64Chunks = [];
        for (let i = 0; i < totalChunks; i++) {
         const start = i * chunkSize;
         const end = start + chunkSize;
         const chunk = base64Image.substring(start, end);
         base64Chunks.push(chunk);
        }
        row.avatar={ totalChunks, base64Chunks }
       }
       delete row.password
        // console.log(row)
      })
      return res.status(201).json(rows)
  })
 
})

//根据手机号查询咨询师id
router.get('/getconsultant_idByaccount',(req,res)=>{
  const {consultant_account}=req.query
  const selectQuery='SELECT id FROM consultants WHERE account=?'
  db.query(selectQuery,[consultant_account],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
    return res.status(201).json(rows[0])
  })
})

//创建用户与咨询师的预约信息
router.post('/createAppointment',upload.none(),(req,res)=>{
   const {coun_id,user_id,date,timeSlot}=req.body
   const times = timeSlot.split("-");
   const start_time = times[0]; // 获取开始时间
   const end_time = times[1]; // 获取结束时间
   // 合并日期和时间，构成需要存储在数据库中的格式
  const dateTimeString = `${date} ${start_time}`;
   const insertQuery='INSERT INTO appointments (user_id,counselor_id,date,start_time,end_time,status) VALUES(?,?,?,?,?,?)'
   const status='Scheduled'
   db.query(insertQuery,[user_id,coun_id,date,start_time,end_time,status],(err,rows)=>{
    if (err) {
       console.error('Error inserting user to database', err);
       return res.status(500).json({ message: '服务器错误' });
     } 
     const updateQuery='UPDATE consultant_schedule SET is_booked =1 WHERE coun_id=? AND start_time=? '
       db.query(updateQuery,[coun_id,dateTimeString],(err,rows)=>{
        if (err) {
          console.error('Error inserting appointment to database', err);
          return res.status(500).json({ message: '服务器错误' });
        }
        else{
          if(rows.affectedRows>0){
            return res.status(201).json({ message: '预约成功' });
          }
          else{
            // console.log('我在这')
            return res.status(402).json({error:'预约失败'})
          }
        }
      })
   })
})

//根据选择的日期查询空闲表中存在的空闲时间段
router.get('/getavailableTimeBydateandis_booked',(req,res)=>{
  const {id,date}=req.query
  const  selectQuery='SELECT * FROM consultant_schedule WHERE coun_id=? AND is_booked is null AND DATE(start_time)=?AND start_time>NOW()'
  db.query(selectQuery,[id,date],(err,rows)=>{
      if (err) {
          console.error('Error inserting user to database', err);
          return res.status(500).json({ message: '服务器错误' });
        } 
            //对时间进行格式处理
      const timeDatas= rows.map(row=>{
      const date=row.start_time.toLocaleString().split(' ')[0];
      const timePart_start=row.start_time.toLocaleString().split(' ')[1]
      const timePart_end=row.end_time.toLocaleString().split(' ')[1]
      // 再次拆分时间部分并获取小时和分钟部分
     var timeParts_start = timePart_start.split(":");
     var timeParts_end = timePart_end.split(":");
     var timePartData_start = timeParts_start[0] + ":" + timeParts_start[1]; // 只获取小时和分钟    
     var timePartData_end = timeParts_end[0] + ":" + timeParts_end[1];
      return `${timePartData_start}-${timePartData_end}`
    })
        res.status(201).json(timeDatas)
  })
})

//查询数据库中设定的预约时间段原数据
router.get('/gettimeperiods_admin',(req,res)=>{
  const selectQuery='SELECT * FROM time_periods '
  db.query(selectQuery,[],(err,rows)=>{
      if (err) {
          console.error('Error inserting user to database', err);
          return res.status(500).json({ message: '服务器错误' });
      } 
      return res.status(200).json(rows);
  })
})

module.exports=router;